// Schema主要用于 "定义" MongoDB中集合Collection里文档document的结构
// 每个schema会 "映射" 到mongodb中的一个collection，schema "不具备" 操作数据库的能力
// 再由Model模型对数据库进行操作

/*define的数据类型
String      字符串
Number      数字
Date        日期
Buffer      二进制
Boolean     布尔值
Mixed       混合类型
ObjectId    对象ID
Array       数组*/


const mongoose = require('mongoose');//导入Model 构造器
const Schema = mongoose.Schema;//构造函数

// 实例化的时候数据尽量写全(内部也要写 ---  "错误:内部不要写");如没写的,不能对其操作。 
// 不过后期需要字段可以再加: MySchema.add({ name: 'string', color: 'string', price: 'number' });
// 声明字段类型有两种方法，一种是首字母大写的字段类型，另一种是引号包含的小写字段类型   String==='string'
function zhushiModel() {
  // Model 模型: 
  // 第一个参数是模型/文档名称(一个参数和其返回值设置为相同的值，否则会出现不可预知的结果!!!!!!);第二个参数为Schema的实例化对象  
  // Model是由Schema编译而成的假想（fancy）构造器，具有抽象属性和行为
  // Model的每一个实例（instance）就是一个document，document可以保存到数据库和对数据库进行操作
  // model是由schema生成的模型，可以对数据库的操作

  /*// 实例方法: Model的实例是document，内置实例方法有很多，如 save，可以通过Schema对象的methods属性给实例自定义扩展方法
  schema.methods.findSimilarSizes = function(cb){
      return this.model('MyModel').find({size:this.size},cb);
  }*/

  /*// 静态方法: 通过Schema对象的statics属性给 Model 添加静态方法
  schema.statics.findByName = function(name,cb){
      return this.find({name: new RegExp(name,'i')},cb);
  }*/

  /*// 两种方法的使用区别: 导入之后使用的
  // statics
  Article.staticFunc ()
  
  //methods
  const article = new Article(arguments)
  article.methodFunc()
  */
}
// Mongoose会将集合名称设置为模型名称的小写版: (在这儿的)大小写组合(在数据库中)都会变成小写的
// user => users //在这儿没有复数;在数据库中对应着他的复数。若结尾是数字就没这个烦恼

let uid_schema = new Schema({
  username: String,
  id: Number,
});
exports.Uid = mongoose.model('uid', uid_schema);

let userinfo_schema = new Schema({
  email: String,
  password: String,
  // confirm: String,
  nickname: String,
  uid: Number,
  registration_time: Date,
  avatar: String,
  // prefix: String,// +86
  // phone: String,
  // captcha: String,// 验证码
  agreement: Boolean,
  token: String,
  collectList: Array//收藏
});
exports.Userinfo = mongoose.model('userinfo', userinfo_schema);

let article_schema = new Schema({
  avatar: String,
  author: String,
  html: String,
  text: String,
  isPub: Boolean,
  isDraft: Boolean,
  title: String,
  tags: Array,
  time: Number,
  praisePoints: Array,//点赞
  commentNum: Array,//评论
});
exports.Article = mongoose.model('article', article_schema);


// 如果遇到加入数据的数据不一样,可以来看看schema配了没 
